/**
* <p>Title: UserService.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2015</p>
* <p>Company: SiySoft</p>
* @author liguanghui
* @date 2015年5月28日
* @version 1.0
*/
package com.siysoft.tc.base.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import com.siysoft.tc.base.bean.bo.AccountBo;
import com.siysoft.tc.base.bean.bo.InterestBo;
import com.siysoft.tc.base.bean.bo.MessageBo;
import com.siysoft.tc.base.bean.bo.PaginationBo;
import com.siysoft.tc.base.bean.bo.PersonalChatBo;
import com.siysoft.tc.base.bean.bo.ReservationBo;
import com.siysoft.tc.base.bean.bo.ReservationDetailBo;
import com.siysoft.tc.base.bean.bo.SystemMessageBo;
import com.siysoft.tc.base.bean.bo.UserBo;
import com.siysoft.tc.base.bean.to.Resource;
import com.siysoft.tc.base.bean.to.RoleUser;
import com.siysoft.tc.base.bean.to.School;
import com.siysoft.tc.base.bean.to.Teacher;
import com.siysoft.tc.base.bean.to.User;
import com.siysoft.tc.base.exception.DuplicateUserException;
import com.siysoft.tc.base.exception.EmailAlreadyExistException;
import com.siysoft.tc.base.exception.NoSuchUserException;
import com.siysoft.tc.base.exception.PhoneNumberAlreadyExistException;
import com.siysoft.util.IMap;

/**
 * <p>Title: UserService</p>
 * <p>Description: </p>
 * <p>Company: SiySoft</p>
 * @author    liguanghui
 * @date       2015年5月28日
 */
public interface IUserService {
	/**
	 * 方法摘要：  根据主键获取User
	 * 作者：liguanghui
	 * 日期：2015年5月28日 上午8:20:02
	 * @param user_id
	 * @return
	 */
	User getUserById(int user_id);
	/**
	 * 方法摘要： 根据手机号获取User
	 * 作者：liguanghui
	 * 日期：2015年5月28日 上午8:20:26
	 * @param telephone
	 * @return 
	 * @throws DuplicateUserException 
	 */
	User getUserByTelephone(String telephone) throws DuplicateUserException;
	
	
	/**
	 * 方法摘要： 头像上传到db_resource表中
	 * 作者：lizhenfeng
	 * 日期：2015年5月28日 上午8:08:26
	 * @param resource
	 * @return 
	 */
	void changehead(Resource resource, String local);
	
	
	
	/**
	 * 方法摘要： 修改user
	 * 作者：lizhenfeng
	 * 日期：2015年6月02日 上午8:08:26
	 * @param user
	 * @return 
	 */
	void updateUser(User user);
	
	/**
	 * 方法摘要： 通过邮箱或手机获取
	 * 作者：liguanghui
	 * 日期：2015年6月2日 下午5:45:14
	 * @param emailOrPhone
	 * @return
	 * @throws DuplicateUserException 
	 * @throws NoSuchUserException 
	 */
	User getUserByEmailOrTelephone(String emailOrPhone) throws DuplicateUserException, NoSuchUserException;
	/**
	 * 
	 * 方法摘要： 用户注册
	 * 作者：liguanghui
	 * 日期：2015年6月3日 下午6:14:40
	 * @param user
	 */
	int insertUser(User user);
	
	/**
	 * 方法摘要： 获取收入金额
	 * 作者：lizhenfeng
	 * 日期：2015年6月3日 上午10:00:14
	 * @param emailOrPhone
	 * @return
	 * @throws Exception 
	 */
	BigDecimal count (String userid) throws Exception;
	/**
	 * 方法摘要： 验证邮箱和手机唯一性
	 * @author victoryu
	 * @param phone
	 * @param email
	 * @return
	 */
	void checkPhoneAndEmailUnique(String phone,String email) throws PhoneNumberAlreadyExistException,EmailAlreadyExistException;
	/**
	 * 方法摘要： 验证有没有此用户
	 * @author victoryu
	 * @param phone
	 * @return true 唯一;false 不唯一
	 */
	boolean HasUser(String phone) ;
	/**
	 * 方法摘要： 数据库添加老师信息
	 * 作者：liguanghui
	 * 日期：2015年6月9日 上午11:39:29
	 * @param teacher
	 * @return 
	 */
	public int InsertTeacher(Teacher teacher);
	/**
	 * 方法摘要： 个人中心获取交易记录
	 * 作者：liguanghui
	 * 日期：2015年7月14日 下午3:36:41
	 * @param iMap
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, String>> getTrading(IMap iMap) throws Exception;
	void updateRoleUser(RoleUser roleuser);
	
	/**
	 * 检验邀请码的唯一性
	 * @param key
	 * @return
	 */
	public boolean checkInviteKey(String key);
	
	/**
	 * 
	 * @param name
	 * @param telephone
	 * @param email
	 * @param password
	 * @param grade 
	 * @return
	 */
	User createUser(String name, String telephone, String email, String password, String grade);
	
	/**
	 * 
	 * @param id
	 * @param school
	 * @param student_id
	 * @return
	 */
	Integer completeUser(Integer id, String school,
			String student_id);
	/**
	 * 
	 * @param pb 
	 * @return
	 */
	List<InterestBo> getInterest(PaginationBo pb);
	
	/**
	 * 
	 * @param name_email_studentid
	 * @return
	 */
	User login(String name_email_studentid);
	
	/**
	 * 
	 * @param id
	 * @param reservation_pb
	 * @param assessment_pb
	 * @return
	 */
	UserBo getUserInfo(Integer id, PaginationBo reservation_pb, PaginationBo assessment_pb);
	
	/**
	 * 
	 * @param id
	 * @return
	 */
	List<ReservationBo> getReservation(Integer id);
	
	/**
	 * 
	 * @param id
	 * @param offset 
	 * @param limit 
	 * @return
	 */
	List<AccountBo> getAccount(Integer id, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param limit
	 * @param offset
	 * @return
	 */
	List<SystemMessageBo> getSystemMessage(Integer id, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param limit
	 * @param offset
	 * @return
	 */
	List<MessageBo> getMessage(Integer id, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param limit
	 * @param offset
	 * @return
	 */
	List<MessageBo> getMessageDetail(Integer id, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param reciver_id
	 * @param message
	 * @return
	 */
	Integer reply(Integer id, Integer reciver_id, String message);
	
	/**
	 * 
	 * @param id
	 * @param reservation_id 
	 * @param pb 
	 * @return
	 */
	ReservationDetailBo getReservationDetail(Integer id, Integer reservation_id, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param reservation_id 
	 * @return
	 */
	Integer getUserReservationStatus(Integer id, Integer reservation_id);
	
	/**
	 * 
	 * @param id 
	 * @param interest
	 * @return
	 */
	Integer setInterest(Integer id, JSONArray interest);
	
	/**
	 * 
	 * @param name
	 * @return
	 */
	Integer judgeName(String name);
	
	/**
	 * 
	 * @param telephone
	 * @return
	 */
	Integer judgeTelephone(String telephone);
	
	/**
	 * 
	 * @param email
	 * @return
	 */
	Integer judgeEmail(String email);
	/**
	 * 
	 * @return
	 */
	List<School> getSchool();
	
	
	/**
	 * 
	 * @param sender_id
	 * @param receiver_id
	 * @param content
	 * @return
	 */
	String PersonalChatSend(Integer sender_id, Integer receiver_id,
			String content);
	
	/**
	 * 
	 * @param user_id1
	 * @param user_id2
	 * @param pb
	 * @return
	 */
	List<PersonalChatBo> getPersonalChatDetail(Integer user_id1,
			Integer user_id2, PaginationBo pb);
	
	/**
	 * 
	 * @param id
	 * @param pb
	 * @return
	 */
	List<PersonalChatBo> PersonalChatList(Integer id, PaginationBo pb);
	
	/**
	 * 
	 * @param name
	 * @return
	 */
	Integer judgeLecture(String name);
	
	/**
	 * 
	 * @param pb
	 * @param teacher_name
	 * @return
	 */
	List<InterestBo> getTeacherCourseList(PaginationBo pb, String teacher_name);
	
}
